import { puppeteer, verc, Show, plugin, config } from '../../api/api.js';
import {
  Read_player,
  Write_player,
  __PATH,
  existplayer,
  channel
} from '../../model/xiuxian.js';
import {
  readall,
  dataall,
} from '../../model/duanzaofu.js';

export class newthing extends plugin {
  constructor() {
    super({
      name: 'newthing', // 插件名称
      dsc: '交易模块', // 插件描述
      event: 'message', // 监听的事件类型
      priority: 600, // 插件优先级
      rule: [
        {
          reg: '^江湖传闻', // 匹配规则，触发条件为消息以“江湖传闻”开头
          fnc: 'newsThing', // 触发时调用的函数
        },
      ],
    });
  }

  async newsThing(e) {
    try {
      // 从“传闻系统”中读取所有传闻数据
      const allThing = await readall('传闻系统');
      let TIME = Date.now(); // 当前时间戳
      let a = []; // 用于存储符合条件的传闻
      let B = 0; // 用于记录传闻数量

      // 遍历所有传闻
      for (let item of allThing) {
        let yes = 1; // 标记是否为重复传闻
        for (let and of a) {
          // 如果传闻的名称和UID都相同，则标记为重复
          if ((and.name == item.name) && (and.uid == item.uid)) {
            yes = 0;
          }
        }
        // 筛选出12小时内的非重复传闻
        if (((TIME - item.Time) < 1000 * 60 * 60 * 12) && (yes == 1)) {
          a.push(item);
        }
      }

      console.log(a); // 输出筛选后的传闻
      let reply = '';
      if (a.length == B) {
        // 如果没有符合条件的传闻，回复“近期无传闻”
        e.reply(`近期无传闻`);
        return;
      }

      let newimg = []; // 用于存储传闻的格式化数据
      for (let news of a) {
        // 根据传闻的UID读取玩家信息
        let player = await Read_player(news.uid);
        let newtome = Math.floor((TIME - news.Time) / 1000 / 60 / 60); // 计算传闻的小时差
        let time1 = Math.floor(newtome % 24); // 小时
        let time2 = Math.floor(((TIME - news.Time) / 1000 / 60) % 60); // 分钟
        let zongmen = '';
        try {
          zongmen = player.宗门.宗门名称; // 获取玩家的宗门名称
        } catch {
          zongmen = '(无门无派)'; // 如果没有宗门，则显示“无门无派”
        }

        let pinji = ''; // 物品的稀有度
        if (news.稀有度 == 1) {
          pinji = '仙品';
        } else if (news.稀有度 == 2) {
          pinji = '圣品';
        } else if (news.稀有度 == 3) {
          pinji = '古品';
        } else if (news.稀有度 == 4) {
          pinji = '孤品';
        } else {
          pinji = '垃圾';
        }

        // 格式化传闻数据
        let new1 = {
          名号: player.名号 + '(' + zongmen + ')', // 玩家名号和宗门
          TIME: `${time1}时,${time2}分`, // 传闻时间
          物品: news.name + '(' + pinji + ')', // 物品名称和稀有度
          数量: news.num, // 物品数量
        };
        newimg.unshift(new1); // 将传闻数据添加到数组
      }

      // 更新传闻系统数据
      await dataall(a, '传闻系统');
      // 生成传闻图片
      let img = await get_chuanwen_img(e, newimg);
      e.reply(img); // 回复生成的图片
      return;
    } catch {
      // 如果发生错误，清空传闻系统数据并回复“近期无传闻”
      await dataall([], '传闻系统');
      e.reply('近期无传闻');
      return;
    }
  }
}

// 生成传闻图片
async function get_chuanwen_img(e, a) {
  const data1 = await new Show(e).get_chuanwen({ a }); // 调用Show类生成传闻数据
  let img = await puppeteer.screenshot('chuanwen', {
    ...data1, // 使用传闻数据生成截图
  });
  return img;
}

// 生成随机码的函数
function generateCodes(numOfCodes) {
  const codes = [];
  const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 可用字符集
  while (codes.length < numOfCodes) {
    let code = "A"; // 每个随机码以“A”开头
    for (let i = 0; i < 24; i++) {
      let randomIndex = Math.floor(Math.random() * chars.length); // 随机选择字符
      let char = chars.charAt(randomIndex);
      code += char;
    }
    codes.push(code); // 添加生成的随机码
  }

  // 使用Fisher-Yates算法打乱随机码数组
  for (let i = codes.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [codes[i], codes[j]] = [codes[j], codes[i]];
  }

  return codes; // 返回生成的随机码数组
}
